class Dep { // 发布者
  constructor() {
    this.subs = []; // 记录所有的观察者
  }

  addSub(sub) {
    if (sub && sub.update) {
      this.subs.push(sub); // 添加观察者
    }
  }

  // 发布者触发notify方法 会调用记录的所有观察者的update方法
  notify() {
    this.subs.forEach(sub => {
      sub.update();
    });
  }
}

// 观察者中都有一个update方法
class Watcher { // 观察者-订阅者
  update() {
    console.log('update');
  }
}

const dep = new Dep();
const watcher = new Watcher();
dep.addSub(watcher);
dep.notify();
